package com.librelato.tela;

import java.util.ArrayList;
import java.util.Calendar;
import java.util.Collections;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.faces.bean.ManagedBean;
import javax.faces.bean.ManagedProperty;
import javax.faces.bean.ViewScoped;
import javax.faces.context.FacesContext;
import javax.servlet.http.HttpSession;

import com.librelato.bean.HistoricoSolicitacaoProducaoBean;
import com.librelato.bean.SolicitacaoProducaoBean;
import com.librelato.bean.StatusAcompanhamentoBean;
import com.librelato.bean.UsuarioBean;
import com.librelato.negocio.SolicitacaoProducaoServico;
import com.librelato.negocio.interfaces.IServicoGenerico;
import com.librelato.util.Ferramentas;

@ManagedBean
@ViewScoped
public class ListaSolicitaProdTela extends TelaAbstrata {

	@ManagedProperty(value = "#{usuario}")
	private UsuarioBean usuario;

	private String dataDeFiltro;

	private String dataAteFiltro;

	private String numDeFiltro;

	private String numAteFiltro;

	private String filialFiltro;

	private String opcaoFilial;

	private String linhaFiltro;
	
	private String statusFiltro;

	private List<SolicitacaoProducaoBean> listaSolicitacaoProducao;

	private SolicitacaoProducaoServico<SolicitacaoProducaoBean> solicitacaoServico;

	private Map<String, String> param;
	
	private String htmlExpansion = "";
	
	private List<StatusAcompanhamentoBean> listaStatusSp;

	public ListaSolicitaProdTela() {
		usuario = usuario == null ? (UsuarioBean) ((HttpSession) FacesContext
				.getCurrentInstance().getExternalContext().getSession(false))
				.getAttribute("usuario") : usuario;
		solicitacaoServico = new SolicitacaoProducaoServico<SolicitacaoProducaoBean>();
		listaSolicitacaoProducao = new ArrayList<SolicitacaoProducaoBean>();
		Calendar calendar = Calendar.getInstance();
		calendar.setTime(new Date());
		calendar.add(Calendar.DATE, -90);
		dataDeFiltro = Ferramentas.formataData(calendar.getTime().getTime(),
				"dd/MM/yy");
		calendar.add(Calendar.DATE, 120);
		dataAteFiltro = Ferramentas.formataData(calendar.getTime().getTime(),
				"dd/MM/yy");
		opcaoFilial = "ORIGEM";
		try {
			listaStatusSp = solicitacaoServico.buscaStatusCadastrados();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	public void filtrarSolicitacoesProd() {
		try {
			param = new HashMap<String, String>();
			if (filialFiltro != null && !"".equals(filialFiltro)) {
				param.put("FILIAL", filialFiltro);
			}
			if (dataDeFiltro != null && !"".equals(dataDeFiltro)) {
				param.put("DATADE", dataDeFiltro);
			}
			if (dataAteFiltro != null && !"".equals(dataAteFiltro)) {
				param.put("DATAATE", dataAteFiltro);
			}
			if (numDeFiltro != null && !"".equals(numDeFiltro)) {
				param.put("NUMDE", numDeFiltro);
			}
			if (numAteFiltro != null && !"".equals(numAteFiltro)) {
				param.put("NUMATE", numAteFiltro);
			}
			if (linhaFiltro != null && !"".equals(linhaFiltro)) {
				param.put("LINHA", linhaFiltro);
			}
			if (opcaoFilial != null && !"".equals(opcaoFilial)) {
				param.put("OPCAOFILIAL", opcaoFilial);
			}
			if (statusFiltro != null && !"".equals(statusFiltro)) {
				param.put("STATUS", statusFiltro);
			}

			listaSolicitacaoProducao = solicitacaoServico
					.buscaSolicitacoesProducao(param);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	
	
	public void atualizaExpansion(SolicitacaoProducaoBean sp) {

		try {

			StringBuilder sb = new StringBuilder();
			StringBuilder sbCabecalho = new StringBuilder();
			List<HistoricoSolicitacaoProducaoBean> listaHistorico;
			listaHistorico = this.solicitacaoServico.buscaHistoricoSolicitacaoProducao(sp);			
			Collections.sort(listaHistorico);
			
			sb.append("<table class='ui-panelgrid ui-widget' style='margin-top:20px' role='grid'>");

			sbCabecalho.append("<tr class='ui-widget-header' role='row'>");
			sbCabecalho
					.append("<td role='columnheader' class='ui-widget-header'>Filial</td>");
			sbCabecalho
					.append("<td role='columnheader' class='ui-widget-header'>Nº SP</td>");
			sbCabecalho
					.append("<td role='columnheader' class='ui-widget-header'>Data</td>");
			sbCabecalho
					.append("<td role='columnheader' class='ui-widget-header'>Status</td>");
			sbCabecalho
					.append("<td role='columnheader' class='ui-widget-header'>Filial de Produção</td>");
			sbCabecalho
					.append("<td role='columnheader' class='ui-widget-header'>Usuário</td>");
			sbCabecalho
					.append("<td role='columnheader' class='ui-widget-header'>Observação</td>");
			sbCabecalho.append("</tr>");
			preecheHtmlTabela(sb, sbCabecalho, listaHistorico);
			sb.append("</table>");
			htmlExpansion = sb.toString();

		} catch (Exception e) {
			e.printStackTrace();
		}

	}

	private void preecheHtmlTabela(StringBuilder sb, StringBuilder sbCabeca,
			List<HistoricoSolicitacaoProducaoBean> listaHistorico) {

		sb.append("<thead class='ui-panelgrid-header'>");
		sb.append(sbCabeca.toString());
		sb.append("	</thead>");

		sb.append("<tbody>");
		for (int i = 0; i < listaHistorico.size(); i++) {
			sb.append("<tr class='ui-widget-content' role='row'>");
			sb.append("<td role='gridcell'>");
			sb.append(listaHistorico.get(i).getFilOri());
			sb.append("</td>");
			sb.append("<td role='gridcell'>");
			sb.append(listaHistorico.get(i).getNumSp());
			sb.append("</td>");
			sb.append("<td role='gridcell'>");
			sb.append(Ferramentas.formataData(listaHistorico.get(i)
					.getDataAcompanhamento().getTime(), "dd/MM/yy HH:mm"));
			sb.append("</td>");
			sb.append("<td role='gridcell'>");
			sb.append(listaHistorico.get(i).getStatus().getDescricao().trim()+" (" + listaHistorico.get(i).getStatus().getCodigo() + ")");
			sb.append("</td>");
			sb.append("<td role='gridcell'>");
			sb.append(listaHistorico.get(i).getFilProd());
			sb.append("</td>");
			sb.append("<td role='gridcell'>");
			sb.append(listaHistorico.get(i).getUsuario());
			sb.append("</td>");
			sb.append("<td role='gridcell'>");
			sb.append(listaHistorico.get(i).getObservacao());
			sb.append("</td>");
			sb.append("</tr>");
		}
		sb.append("</tbody>");

	}

	@SuppressWarnings("rawtypes")
	@Override
	protected IServicoGenerico getServico() {
		return this.solicitacaoServico;
	}

	public UsuarioBean getUsuario() {
		return usuario;
	}

	public void setUsuario(UsuarioBean usuario) {
		this.usuario = usuario;
	}

	public String getDataDeFiltro() {
		return dataDeFiltro;
	}

	public void setDataDeFiltro(String dataDeFiltro) {
		this.dataDeFiltro = dataDeFiltro;
	}

	public String getDataAteFiltro() {
		return dataAteFiltro;
	}

	public void setDataAteFiltro(String dataAteFiltro) {
		this.dataAteFiltro = dataAteFiltro;
	}

	public String getNumDeFiltro() {
		return numDeFiltro;
	}

	public void setNumDeFiltro(String numDeFiltro) {
		this.numDeFiltro = numDeFiltro;
	}

	public String getNumAteFiltro() {
		return numAteFiltro;
	}

	public void setNumAteFiltro(String numAteFiltro) {
		this.numAteFiltro = numAteFiltro;
	}

	public String getFilialFiltro() {
		return filialFiltro;
	}

	public void setFilialFiltro(String filialFiltro) {
		this.filialFiltro = filialFiltro;
	}

	public String getOpcaoFilial() {
		return opcaoFilial;
	}

	public void setOpcaoFilial(String opcaoFilial) {
		this.opcaoFilial = opcaoFilial;
	}

	public String getLinhaFiltro() {
		return linhaFiltro;
	}

	public void setLinhaFiltro(String linhaFiltro) {
		this.linhaFiltro = linhaFiltro;
	}

	public List<SolicitacaoProducaoBean> getListaSolicitacaoProducao() {
		return listaSolicitacaoProducao;
	}

	public void setListaSolicitacaoProducao(
			List<SolicitacaoProducaoBean> listaSolicitacaoProducao) {
		this.listaSolicitacaoProducao = listaSolicitacaoProducao;
	}

	public String getHtmlExpansion() {
		return htmlExpansion;
	}

	public void setHtmlExpansion(String htmlExpansion) {
		this.htmlExpansion = htmlExpansion;
	}

	public List<StatusAcompanhamentoBean> getListaStatusSp() {
		return listaStatusSp;
	}

	public void setListaStatusSp(List<StatusAcompanhamentoBean> listaStatusSp) {
		this.listaStatusSp = listaStatusSp;
	}

	public String getStatusFiltro() {
		return statusFiltro;
	}

	public void setStatusFiltro(String statusFiltro) {
		this.statusFiltro = statusFiltro;
	}
	
	
	

}
